package com.wn.service.confirmhandler;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

/**
 * @author yellow Docter
 * @date 2022 -09-01
 * @desc
 * 实现接口:
 *    01  交换机的接口     ConfirmCallback
 *    02  队列确认的接口   ReturnCallback
 */

@Component
@Slf4j
public class ConfirmHandler implements RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnCallback {
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        log.info("消息数据:{}",correlationData);
        log.info("是否确认收到消息:{}",ack);
        log.info("消息失败的原因  :{}",cause);

        if (ack){
            System.out.println("交换机收到了消息.....");
        }else{
            System.out.println("=====>交换机收消息失败.....");
            //出现了问题  重新发送 或者 存储到数据库中，在指定的时间把消息查询出来 进行统一处理
        }
    }

    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {

        //消息没有到队列中
        System.out.println("=====>交换机收消息失败.....");

        //出现了问题  重新发送 或者 存储到数据库中，在指定的时间把消息查询出来 进行统一处理
        log.info("消息数据:{}",new String(message.getBody()));
        log.info("应答码:{}",replyCode);
        log.info("字符串 :{}",replyText);
        log.info("交换机,exchange:{}",exchange);
        log.info("路由:{}",routingKey);

    }
}
